package my.springboot3.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import my.springboot3.dto.entity.User;
import org.apache.ibatis.annotations.*;

@Mapper
/**
 * 用户Mapper接口
 * 增删改查
 */

/**
 * UserMapper接口定义了对用户表进行操作的方法
 */
public interface UserMapper extends BaseMapper {

    /**
     * 根据id查询用户
     *
     * @param id 用户的唯一标识
     * @return 返回用户对象，如果找不到则返回null
     */
    @Select("select * from user where id = #{id}")
    User findById(int id);

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 返回用户对象，如果找不到则返回null
     */
    @Select("select * from user where username = #{username}")
    User findByUsername(String username);

    /**
     * 添加用户,输入用户名和密码
     *
     * @param user 用户对象，包含用户名和密码等信息
     * @return 插入操作影响的行数
     */
    @Insert("insert into user(username,password,create_time,update_time)" +
            " values(#{username},#{password},now(),now())")
    int add(User user);
    /**
     * 根据用户id删除用户
     *
     * @param id 用户的唯一标识
     * @return 删除操作影响的行数
     */
    @Delete("delete from user where id=#{id}")
    int deleteById(int id);

    /**
     * 更新用户的头像
     *
     * @param avatarUrl 新的头像URL
     * @param id 用户的唯一标识
     */
    @Update("update user set user_pic=#{avatarUrl},update_time=now() where id=#{id}")
    void updateAvatar(@Param("avatarUrl") String avatarUrl,@Param("id") Integer id);

    /**
     * 更新用户的密码
     *
     * @param md5String 加密后的密码
     * @param id 用户的唯一标识
     */
    @Update("update user set password=#{md5String},update_time=now() where id=#{id}")
    void updatePwd(@Param("md5String") String md5String, @Param("id") Integer id);


    /**
     * 更新用户的昵称和邮箱
     *
     */
    @Update("update user set nickname=#{nickname},email=#{email},update_time=now() where id=#{id}")
    void updateAll(User user);
}


